import os
from datetime import datetime
from PIL import Image
from collections import defaultdict

'''
在路径 A 及其子目录中递归搜索 .txt 和图片文件（.png, .jpg, .jpeg）。
对于 .txt 文件，收集内容和修改时间。
对于图片文件，收集分辨率和大小。
按文件名 A-Z 排序。
若多个文件收集到的信息相同，则合并为一次打印，并列出所有路径。
'''

# 定义要扫描的目录
path_A = "/home/champrin/Desktop/record_data/网盘/pay_extract"

# 支持的文件类型
text_extensions = ['.txt']
image_extensions = ['.png', '.jpg', '.jpeg']

# 使用字典收集文件信息，相同信息的文件合并
file_info_dict = defaultdict(list)

# 递归遍历目录
for root, dirs, files in os.walk(path_A):
    for file in files:
        file_path = os.path.join(root, file)
        file_ext = os.path.splitext(file)[1].lower()

        # 处理 txt 文件
        if file_ext in text_extensions:
            try:
                with open(file_path, 'r', encoding='utf-8') as f:
                    content = f.read()
                mod_time = datetime.fromtimestamp(os.path.getmtime(file_path)).strftime('%Y-%m-%d %H:%M:%S')
                info_key = ('txt', content, mod_time)
                file_info_dict[info_key].append(file_path)
            except Exception as e:
                print(f"无法读取文件：{file_path}, 错误：{e}")

        # 处理图片文件
        elif file_ext in image_extensions:
            try:
                with Image.open(file_path) as img:
                    width, height = img.size
                file_size = os.path.getsize(file_path)
                resolution = f'{width}x{height}'
                size = f'{file_size / 1024:.2f} KB'
                info_key = ('image', resolution, size)
                file_info_dict[info_key].append(file_path)
            except Exception as e:
                print(f"无法读取图片：{file_path}, 错误：{e}")

# 将字典转为列表并按文件名排序
sorted_file_info = sorted(file_info_dict.items(), key=lambda x: sorted(x[1])[0])

# 打印结果
for info_key, paths in sorted_file_info:
    file_type = info_key[0]
    print("-" * 40)
    if file_type == 'txt':
        print("类型：TXT 文件")
        print(f"修改时间：{info_key[2]}")
        print(f"内容：{info_key[1]}")
    elif file_type == 'image':
        print("类型：图片文件")
        print(f"分辨率：{info_key[1]}")
        print(f"大小：{info_key[2]}")
    print("路径：")
    for path in sorted(paths):
        print(f"  - {path}")